﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace Presentation
{
    public partial class LapHoaDonThanhToan : Form
    {
        private List<ChiTietPhieuThueDTO> dsChiTietPhieuThue = ChiTietPhieuThueBUS.layDSChiTietPhieuThue();
        private List<ChiTietHoaDonDTO> dsChiTietHoaDon = new List<ChiTietHoaDonDTO>();
        public LapHoaDonThanhToan()
        {
            InitializeComponent();
        }

        private void layDSPhong()
        {
            List<PhongDTO> danhSachPhong = PhongBUS.layDSPhong();
            cbbTenPhong.DataSource = danhSachPhong;
            cbbTenPhong.DisplayMember = "TenPhong";
        }

        private void LapHoaDonThanhToan_Load(object sender, EventArgs e)
        {
            layDSPhong();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            List<ChiTietPhieuThueDTO> dsCTPhieuThueDuocChon=new List<ChiTietPhieuThueDTO>();
            for(int i=0;i<dsChiTietPhieuThue.Count();i++)
            {
                if((cbbTenPhong.Text ==dsChiTietPhieuThue[i].PhieuThue.Phong.TenPhong)&&(dsChiTietPhieuThue[i].PhieuThue.DaThanhToan!=1))
                   dsCTPhieuThueDuocChon.Add(dsChiTietPhieuThue[i]);
            }

            if (dsCTPhieuThueDuocChon.Count() == 0)
            {
                MessageBox.Show("Phòng hiện giờ không có khách đang thuê nên không thể lập hóa đơn!!!", "Thông báo");
            }
            else
            {
                ChiTietHoaDonDTO chiTietHoaDon = new ChiTietHoaDonDTO();

                TimeSpan soNgay= DT_NgayThanhToan.Value - dsCTPhieuThueDuocChon[0].PhieuThue.NgayBatDauThue;
                string kq = soNgay.TotalDays.ToString("00");
                int soNgayThue = int.Parse(kq);
                chiTietHoaDon.SoNgayThue = soNgayThue;

                chiTietHoaDon.DonGia = dsCTPhieuThueDuocChon[0].PhieuThue.Phong.LoaiPhong.DonGia;
                chiTietHoaDon.NgayThanhToan = DT_NgayThanhToan.Value;
                chiTietHoaDon.PhieuThue = dsCTPhieuThueDuocChon[0].PhieuThue;
                if(dsCTPhieuThueDuocChon[0].PhieuThue.Phong.SoKhachHienCo<3)
                {
                    chiTietHoaDon.ThanhTien = (double)(chiTietHoaDon.DonGia * chiTietHoaDon.SoNgayThue);
                }
                else
                {
                    double a = chiTietHoaDon.DonGia * chiTietHoaDon.SoNgayThue;
                    double phuThu = ThamSoBUS.layPhuThu();
                    chiTietHoaDon.ThanhTien = a + phuThu*a;
                }

                int flag = 0;
                for (int i = 0; i < dsCTPhieuThueDuocChon.Count(); i++)
                {
                    if (dsCTPhieuThueDuocChon[i].KhachHang.LoaiKhach.MaLoaiKhach == 2)
                        flag = 1;
                }
                if (flag == 1)
                {
                    chiTietHoaDon.ThanhTien = chiTietHoaDon.ThanhTien * ThamSoBUS.layHeSoKhachHang();
                }

                int test=0;
                if (dsChiTietHoaDon.Count() != 0)
                {
                    for (int k = 0; k < dsChiTietHoaDon.Count(); k++)
                    {
                        if (dsChiTietHoaDon[k].PhieuThue.Phong.MaPhong == chiTietHoaDon.PhieuThue.Phong.MaPhong)
                            test = 1;
                    }

                    if (test == 1)
                        MessageBox.Show("Phòng này đã tồn tại trong danh sách phòng thanh toán...Bạn không được thêm vào nữa!!!", "Thông báo");
                    else
                        dsChiTietHoaDon.Add(chiTietHoaDon);

                }
                else
                {
                    dsChiTietHoaDon.Add(chiTietHoaDon);
                }
                layDSChiTietHoaDon();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        public void layDSChiTietHoaDon()
        {
            Grid_DSChiTietPhieuThue.Rows.Clear();
            double tongGiaTien = 0;
            for (int i = 0; i < dsChiTietHoaDon.Count; i++)
            {
                Grid_DSChiTietPhieuThue.Rows.Add(i+1,dsChiTietHoaDon[i].PhieuThue.Phong.TenPhong,dsChiTietHoaDon[i].PhieuThue.MaPhieuThue,dsChiTietHoaDon[i].SoNgayThue,dsChiTietHoaDon[i].DonGia,dsChiTietHoaDon[i].ThanhTien);
                tongGiaTien = tongGiaTien + dsChiTietHoaDon[i].ThanhTien;
            }
         
            tb_TriGia.Text = tongGiaTien.ToString();
        }

        private void bt_xoa_Click(object sender, EventArgs e)
        {
            if (dsChiTietHoaDon.Count != 0)
            {
                dsChiTietHoaDon.RemoveAt(dsChiTietHoaDon.Count - 1);
                layDSChiTietHoaDon();
            }
        }

        private void DT_NgayThanhToan_MouseHover(object sender, EventArgs e)
        {
            toolTip1.SetToolTip(this.DT_NgayThanhToan, "Nhập ngày theo định dạng NGÀY/THÁNG/NĂM");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            HoaDonDTO hoaDon = new HoaDonDTO();

            if ((tb_TenKH.Text.Trim() != null) && (dsChiTietHoaDon.Count() != 0)&&(tb_DiaChi.Text.Trim()!=null))
            {
                int check = 0;
                try
                {
                    hoaDon.TenKhachHang = tb_TenKH.Text.Trim();
                    hoaDon.DiaChi = tb_DiaChi.Text.Trim();
                    hoaDon.TriGia = double.Parse(tb_TriGia.Text.Trim());

                    bool ketQua = HoaDonBUS.them(hoaDon);
                    if (ketQua == false)
                        throw new Exception();

                    //MessageBox.Show("Lập hoá đơn thành công");
                    check = 1;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Lập hoá đơn thất bại");
                }
                if (check == 1)
                {

                    hoaDon.MaHoaDon = HoaDonBUS.layMaHoaDonLonNhat();
                    try
                    {
                        for (int k = 0; k < dsChiTietHoaDon.Count(); k++)
                        {
                            dsChiTietHoaDon[k].HoaDon = hoaDon;
                            bool ketQua2 = ChiTietHoaDonBUS.them(dsChiTietHoaDon[k]);
                            if (ketQua2 == false)
                            {
                                throw new Exception();
                            }
                            PhongBUS.capNhatSoKhachHienCo(dsChiTietHoaDon[k].PhieuThue.Phong.MaPhong, 0);
                            PhieuThuePhongBUS.capNhatDaThanhToan(dsChiTietHoaDon[k].PhieuThue.MaPhieuThue);
                        }
                        
                        MessageBox.Show("Lập hoá đơn thành công");
                    }
                    catch(System.Exception ex)
                    {
                        MessageBox.Show("Lập hoá đơn thất bại");
                    }
                }
            }
            else
            {
                MessageBox.Show("Không thể lập hoá đơn vì bạn chưa điền đầy đủ thông tin về khách hàng thanh toán hoặc chưa chọn phòng cần thanh toán..Xin vui lòng thử lại!!!", "Thông Báo");
            }
            
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, Application.StartupPath + "\\Help.chm");
        }

        private void tb_TenKH_Leave(object sender, EventArgs e)
        {
            if (tb_TenKH.Text.Trim() == "")
            {
                errorProvider1.SetError(this.tb_TenKH, "Tên khách hàng không được rỗng...");
            }

        }

        private void tb_DiaChi_Leave(object sender, EventArgs e)
        {
            if (tb_DiaChi.Text.Trim() == "")
            {
                errorProvider1.SetError(this.tb_DiaChi, "Địa chỉ không được rỗng...");
            }
        }
    }
}
